package com.io.io03;

import java.io.*;

public class CopyFile {
    public static void main(String[] args) throws Exception {
        File srcFile = new File("D:\\课程\\2022-07-03-2022火箭班-IO-网络原理\\source.jpg");
        File destFile = new File("D:\\课程\\2022-07-03-2022火箭班-IO-网络原理\\dest.jpg");

        // 0. 用于统计复制速度
        long startedAt = System.currentTimeMillis();    // 获取当前时间戳（ms）

        // 1. 准备好搬数据的桶
        byte[] buf = new byte[1024];

        // 2. 打开两个文件
        int count = 0;
        try (InputStream is = new FileInputStream(srcFile)) {
            try (OutputStream os = new FileOutputStream(destFile)) {
                // 3. 不断地用桶从 is 接水，倒入 os 中
                while (true) {
                    int n = is.read(buf);
                    count += n;
                    // System.out.printf("已经复制了 %d 字节的数据\n", count);
                    if (n == -1) {
                        // 全部读完了，可以中止循环了
                        break;
                    }

                    // 直接将读入的数据，原封不同的写入 os 中
                    os.write(buf, 0, n);
                }

                // 4. 冲刷缓冲区
                os.flush();
            }
        }

        // 0. 用于统计复制速度
        long endedAt = System.currentTimeMillis();    // 获取当前时间戳（ms）
        long ms = endedAt - startedAt;
        double s = ms / 1000.0;
        System.out.printf("复制共消耗了: %.3f 秒\n", s);
    }
}
